<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>VUE学习 - 并发请求</title>
</head>

<body>


    <!--载入vue.js-->
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

    <div id="Application">
        <h3>并发请求</h3>
        简介<br />
        同时进行多个请求，并统一处理返回值。<br />
        案例：<br />
        假设有一个聊天工具，同时有你的聊天记录和个人信息。
        此时需要调用两个接口去请求数据。
        此时需要统一处理他们的返回值。
        axios提供的方法：all、spread<br />

        axios.all方法接受一个数组作为参数，数组中的每个元素都是一个请求，
        返回一个promise对象，<br />
        当数组中所有请求均已完成时，执行then方法。<br />
        在then方法中执行了 axios.spread 方法。<br />
        该方法是接收一个函数作为参数，返回一个新的函数。<br />
        接收的参数函数的参数是axios.all方法中每个请求返回的响应。

        您的名字是：{{data.name}} <br />
        地址是：{{weather.address}}

    </div>
    <script>
        const app = Vue.createApp({
            setup() {
                const data = Vue.ref("");
                const weather = Vue.ref("")
                const getData = () => {
                    return axios.get('https://rouse.npc.ink/api/data.php')
                }
                const getWeather = () => {
                    return axios.get('https://rouse.npc.ink/api/weather.php')
                }
                axios.all([getData(), getWeather()])
                    .then(axios.spread((acct, perms) => {
                        data.value = acct.data;
                        weather.value = perms.data;
                    }))


                return { data, weather };

            },
        })

        app.mount("#Application")
    </script>

</body>

</html>